package com.tyler.config;

import jakarta.servlet.http.HttpSession;
import jakarta.websocket.HandshakeResponse;
import jakarta.websocket.server.HandshakeRequest;
import jakarta.websocket.server.ServerEndpointConfig;

/**
 * @author: TylerZhong
 * @description: 自定义配置类，用于在WebSocket握手期间获取并传递HttpSession对象
 * 使得ChatEndpoint类能够在WebSocket连接开启时访问到HTTP会话信息
 */
public class GetHttpSessionConfig extends ServerEndpointConfig.Configurator {

    /**
     * 在WebSocket握手阶段被调用，用于修改握手请求和响应
     * 此处主要目的是从握手请求中提取HttpSession对象，并存储到ServerEndpointConfig中
     *
     * @param sec      WebSocket服务端配置对象
     * @param request  握手请求对象
     * @param response 握手响应对象
     */
    @Override
    public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {
        // 从握手请求中获取HttpSession对象
        HttpSession httpSession = (HttpSession) request.getHttpSession();
        
        // 将HttpSession对象存入ServerEndpointConfig的用户属性中
        // 这样在ChatEndpoint的onOpen方法中可以通过EndpointConfig获取到HttpSession
        sec.getUserProperties().put(HttpSession.class.getName(), httpSession);
    }
}
